home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / demo / menu / menunb.s < prev    next >
Text File  |  1997-01-31  |  46KB  |  2,168 lines

  1. main_debugoff
  2. main_sysinfooff
  3. main_reqinfooff
  4. main_endinfooff
  5. ;main_disabledos
  6. main_playeroff
  7. main_meteroff
  8.  
  9.  
  10. mnu_GETBLITINT:
  11.  move.l gfxbase,a6
  12.  jsr _LVOOwnBlitter(a6)
  13.  
  14.  move.l 4.w,a6
  15.  lea BLITInt,a1
  16.  moveq #6,d0
  17.  jsr _LVOSetIntVector(a6)
  18.  move.l d0,SYSTEMBLITINT
  19.  rts
  20.  
  21. mnu_DROPBLITINT: 
  22.  WBSLOW
  23.  WBSLOW
  24.  
  25.  move.l 4.w,a6
  26.  move.l SYSTEMBLITINT,a1
  27.  moveq #6,d0
  28.  jsr _LVOSetIntVector(a6)
  29.  
  30.  move.l gfxbase,a6
  31.  jsr _LVODisownBlitter(a6)
  32.  rts
  33.  
  34. mnu_nowait    ; Skip the "waiting for opp.."
  35. macro_sync:    MACRO    ; Kills: d7 --            Macro_Sync
  36.     IFND    main_meteroff
  37.         movem.l    d0-a0,-(a7)
  38.         move.l    main_dataptr,a0
  39.         move.l    44(a0),a0
  40.         jsr    (a0)
  41.         move.l    main_dataptr,a0
  42.         move.l    d0,48(a0)
  43.     ENDC
  44. .waitsync\@:    move.l    $dff004,d7
  45.         and.l    #$1ff00,d7
  46.         cmp.l    #305*$100,d7
  47.         bne.s    .waitsync\@
  48.     IFND    main_meteroff
  49.         move.l    main_dataptr,a0
  50.         move.l    40(a0),a0
  51.         jsr    (a0)
  52.         movem.l    (a7)+,d0-a0
  53.     ENDC
  54.     ENDM
  55.  
  56. ;        include    "demo:System/Main_V3.82.S"
  57.  
  58. mnu_start:    bsr.w    mnu_copycredz
  59.         bsr.w    mnu_setscreen
  60.         move.l    a7,mnu_mainstack
  61.  
  62.         bsr.w    mnu_viewcredz
  63.         bsr.w    mnu_cls
  64.     IFND    mnu_nocode
  65.         bsr.w    mnu_protection
  66.  
  67.     ENDC
  68.  
  69. mnu_loop:    lea    mnu_mainmenu,a0
  70.         bsr.w    mnu_domenu
  71.  
  72.         lea    mnu_quitmenu,a0
  73.         bsr.w    mnu_domenu
  74.         bra.w    mnu_loop
  75. mnu_exit:    move.l    mnu_mainstack,a7
  76.         bsr.w    mnu_clearscreen
  77.         rts
  78.  
  79. mnu_protection:    
  80. .retry:        moveq.l    #0,d0
  81.         bsr.w    mnu_getrnd
  82.         move.l    d0,d2
  83.         bsr.w    mnu_getrnd
  84.         move.l    d0,d1
  85.         bsr.w    mnu_getrnd
  86.         lsr.w    #4,d2
  87.         lsr.w    #2,d1
  88.         divu    #7,d0    
  89.         swap.w    d0        ; d0=Page number
  90.         divu    #50,d1    
  91.         swap.w    d1
  92.         addq.w    #1,d1        ; d1=Row number
  93.         divu    #17,d2
  94.         swap.w    d2
  95.         addq.w    #1,d2        ; d2=Column number
  96.         movem.l    d0-d2,-(a7)
  97.         add.w    #65,d0
  98.         move.b    d0,mnu_tableptr
  99.         add.w    #64,d2
  100.         move.b    d2,mnu_columnptr
  101.         move.w    d1,d2
  102.         ext.l    d1
  103.         divu    #10,d1
  104.         add.w    #48,d1
  105.         move.b    d1,mnu_rowptr
  106.         swap.w    d1
  107.         add.w    #48,d1
  108.         move.b    d1,mnu_rowptr+1
  109.         lea    mnu_protecttext,a0
  110.         moveq.l    #4,d0
  111.         moveq.l    #60,d1
  112.         bsr.w    mnu_printxy
  113.         clr.w    mnu_row
  114.         clr.w    mnu_spread
  115.         move.w    #1,mnu_items
  116.         move.w    #180,mnu_cury
  117.         moveq.l    #0,d7
  118. .print:        move.l    d7,-(a7)
  119.         lea    mnu_numberptr,a0
  120.         moveq.l    #24,d0
  121.         move.l    #180,d1
  122.         bsr.w    mnu_printxy
  123.         move.l    (a7)+,d7
  124. .inploop:    move.l    d7,-(a7)
  125.         move.w    #24,mnu_curx
  126.         add.w    d7,mnu_curx
  127.         add.w    d7,mnu_curx
  128.         bsr.w    mnu_docursor
  129.         jsr    key_readkey
  130.         move.l    (a7)+,d7
  131.         tst.b    d0
  132.         beq.s    .inploop
  133.         lea    mnu_numberptr,a0
  134.         add.l    d7,a0
  135.         tst.w    d7
  136.         beq.s    .skipback
  137.         cmp.b    #65,d0
  138.         bne.s    .skipback
  139. ; back space        
  140.         move.b    #32,(a0)
  141.         subq.w    #1,d7        
  142.         bra.s    .print
  143. .skipback:    cmp.w    #3,d7
  144.         bne.s    .noenter
  145.         cmp.w    #68,d0
  146.         beq.s    .enter
  147.         cmp.w    #64,d0
  148.         bne.s    .noenter
  149. .enter:        bra.s    .exit
  150. .noenter:    cmp.w    #3,d7
  151.         beq.s    .error
  152.         cmp.b    #1,d0
  153.         blo.s    .error
  154.         cmp.b    #10,d0
  155.         bhi.s    .error
  156.         bne.s .oknum
  157.         moveq #0,d0        
  158. .oknum:
  159.         add.b #'0',d0
  160.         move.b    d0,(a0)
  161.         addq.w    #1,d7
  162.         bra.w    .print
  163. .error:        move.l    #mnu_errcursanim,mnu_frameptr
  164.         bra.w    .inploop
  165. .exit:        movem.l    (a7)+,d0-d2
  166.         bsr.w    mnu_decoder
  167.         moveq.l    #0,d1
  168.         moveq.l    #0,d2
  169.         move.b    mnu_numberptr,d1
  170.         sub.w    #48,d1
  171.         mulu    #10,d1
  172.         move.b    mnu_numberptr+1,d2
  173.         sub.w    #48,d2
  174.         add.w    d2,d1
  175.         mulu    #10,d1
  176.         move.b    mnu_numberptr+2,d2
  177.         sub.w    #48,d2
  178.         add.w    d2,d1
  179.         cmp.w    d1,d0
  180.         beq.s    .ok
  181.         move.l    #mnu_errcursanim,mnu_frameptr
  182.         move.b    #32,mnu_numberptr
  183.         move.b    #32,mnu_numberptr+1
  184.         move.b    #32,mnu_numberptr+2
  185.         subq.w    #1,.tries
  186.         beq.s    .quit
  187.         bra.w    .retry
  188. .ok:        rts
  189. .quit:        bsr.w    mnu_cls
  190.         moveq.l    #4,d0
  191.         moveq.l    #110,d1
  192.         lea    mnu_dontbelong,a0
  193.         bsr.w    mnu_printxy
  194.         clr.l    counter
  195.         move.l    #mnu_errcursorlong,mnu_frameptr
  196.         move.w    #34,mnu_curx
  197.         move.w    #130,mnu_cury
  198. .w8loop:    bsr.w    mnu_docursor
  199.         cmp.l    #100,counter
  200.         blo.s    .w8loop
  201.         jmp    mnu_exit
  202. .tries:        dc.w    3
  203.  
  204. mnu_decoder:;in:     d0.l=Table
  205. ;            d1.l=Row
  206. ;            d2.l=Column
  207.  
  208. MODIT MACRO
  209.  divs #643,\1
  210.  swap \1
  211.  ENDM
  212.  
  213.  lea .variables(pc),a0
  214.  asl.w #4,d0
  215.  add.w d0,a0
  216.  
  217.  move.w d1,d0    ;row
  218.  muls d0,d0    ;row*row
  219.  MODIT d0
  220.  move.w d2,d4    ;col
  221.  muls d4,d4    ;col*col
  222.  MODIT d4    
  223.  move.w d0,d5    ;row*row
  224.  muls d5,d5    ;row*row*row*row
  225.  MODIT d5 
  226.  move.w d4,d6    ;col*col
  227.  muls d6,d6    ;col*col*col*col
  228.  MODIT d6    
  229.  muls d5,d6    ;row*row*row*row*col*col*col*col
  230.  MODIT d6
  231.  muls (a0),d6    ;*var a
  232.  MODIT d6
  233.  
  234.  muls d1,d4
  235.  MODIT d4
  236.  muls d2,d4
  237.  muls 2(a0),d4
  238.  MODIT d4
  239.  add.w d4,d6
  240.  
  241.  move.w d1,d0
  242.  muls d2,d0
  243.  MODIT d0
  244.  muls 4(a0),d0
  245.  MODIT d0
  246.  add.w d0,d6
  247.  muls 6(a0),d1
  248.  MODIT d1
  249.  muls 8(a0),d2
  250.  MODIT d2
  251.  add.w d1,d2
  252.  add.w d2,d6
  253.  add.w 10(a0),d6
  254.  ext.l d6
  255.  MODIT d6
  256.  neg.w d6
  257.  add.w #999,d6
  258.  move.w d6,d0
  259.  rts
  260.  
  261.  
  262.         rts
  263. ;            a b c d e f        
  264. .variables:    dc.w    54,97,2,94,66,23,0,0    ; Table A
  265.         dc.w    61,78,247,622,59,324,0,0    ; Table B
  266.         dc.w    34,76,99,168,43,66,0,0    ; Table C
  267.         dc.w    63,67,422,132,66,87,0,0    ; Table D
  268.         dc.w    43,49,47,84,51,9,0,0    ; Table E
  269.         dc.w    34,97,20,61,74,33,0,0    ; Table F
  270.         dc.w    74,54,61,62,96,147,0,0    ; Table G
  271. .dividers:
  272. ;    dc.l    643*2000
  273.         dc.w    643
  274.         dc.l    999        
  275.  
  276. mnu_getrnd:    move.w    $dff00a,d0
  277.         add.w    $dff00c,d0
  278.         add.w    $dff008,d0
  279.         add.w    $dff012,d0
  280.         add.w    $dff014,d0
  281.         add.w    $dff016,d0
  282.         add.w    $dff018,d0
  283.         add.w    $dff01a,d0
  284.         add.w    $dff002,d0
  285.         add.w    $dff004,d0
  286.         add.w    $dff006,d0
  287.         rts
  288.  
  289. mnu_viewcredz:    clr.l    counter
  290.         bsr.w    mnu_copycredz
  291. .w8key:        jsr    key_readkey
  292.         cmp.l    #50*10,counter
  293.         beq.s    .exit
  294.         tst.w    d0
  295.         beq.s    .w8key
  296. .exit:        rts
  297.  
  298. mnu_copycredz:    lea    mnu_frame,a0
  299.         lea    mnu_morescreen+3*40*256+32*40,a1
  300.  
  301.         move.w    #10*192-1,d0
  302. .loop:        move.l    (a0)+,(a1)+
  303.         move.l    40*192-4(a0),40*256-4(a1)
  304.         move.l    2*40*192-4(a0),2*40*256-4(a1)
  305.         dbra    d0,.loop        
  306.         rts
  307.         
  308. mnu_clearscreen:bsr.w    mnu_fadeout
  309.         clr.l    main_vblint
  310. .loop1:        tst.w    mnu_bltbusy
  311.         bne.s    .loop1
  312. ;        bsr.w    key_kbdexit
  313.         clr.l    main_bltint
  314. ;        macro_sync
  315.         move.w    #$7de0,$dff096
  316.         rts
  317.  
  318. mnu_setscreen:    bsr.w    mnu_init
  319.         macro_sync
  320.         move.w    #$7de0,$dff096
  321.         move.w    #$8200!%110000000,$dff096
  322.         move.l    #mnu_copper,$dff080
  323.         move.w    #0,$dff088
  324. ;        bsr.w    key_kbdinit
  325.         move.l    #mnu_vblint,main_vblint    
  326.         bsr.w    mnu_fadein
  327.         rts
  328.  
  329. mnu_vblint:
  330.         bsr.w    mnu_movescreen
  331.         ;bsr.w    mnu_dofire
  332. ;        bsr.w    key_kbdlevel3
  333.         bsr.w    mnu_animcursor
  334.         ;bsr.w    mnu_plot
  335.         rts
  336.  
  337. mnu_init:    bsr.w    mnu_initrnd        ; Uses palette buffer
  338.         bsr.w    mnu_createpalette
  339.         tst.w    .cp
  340.         bne.w    .skipfs
  341.  
  342.         lea    mnu_screen,a0
  343.         lea    mnu_screen+40*256,a1
  344.         lea    mnu_screen+40*256*2,a2
  345.         lea    mnu_screen+40*256*3,a3
  346.         move.w    #40*256/4-1,d1
  347. .fsloop:    move.l    (a1),d0
  348.         move.l    d0,(a2)+
  349.         move.l    d0,(a3)+
  350.         move.l    (a0)+,(a1)+
  351.         dbra    d1,.fsloop
  352. .skipfs:    st.b    .cp
  353. ;-------------------------------------------------------------- Clear screen --
  354.         lea    mnu_morescreen,a0
  355.         move.l    #40*256*3/16-1,d0
  356.         moveq.l    #0,d1
  357. .clrloop:    
  358.         REPT    4
  359.         move.l    d1,(a0)+
  360.         ENDR
  361.         dbra    d0,.clrloop                
  362.         bsr.w    mnu_cls
  363. ;--------------------------------------------------------------- Set bplptrs --
  364.         lea    mnu_bplptrs+2,a0
  365.         move.l    #mnu_screen,d0
  366.         moveq.l    #0,d1
  367.         bsr.w    .setbplptrs
  368.         move.l    #mnu_screen+40*256*2,d0
  369.         moveq.l    #0,d1
  370.         bsr.w    .setbplptrs
  371.         move.l    #mnu_morescreen,d0
  372.         moveq.l    #5,d1
  373.         bsr.s    .setbplptrs
  374. ;-------------------------------------------------------------- Init palette --
  375.         lea    mnu_palette,a2
  376.         moveq.l    #7,d0            ; #of banks-1
  377.         move.l    #$01060000,d6
  378.         move.l    #$01060200,d7
  379.         lea    mnu_colptrs,a0
  380.         lea    mnu_colptrs+33*4,a1
  381. .bankloop:    moveq.l    #31,d1            ; d1=#of colour/bank
  382.         move.l    d6,(a0)+
  383.         move.l    d7,(a1)+
  384.         move.w    #$0180,d5
  385. .colloop:    ;move.l    (a2)+,d2
  386.         clr.l    d2
  387.         move.l    d2,d3
  388.         and.l    #$f0f0f0,d2
  389.         lsr.l    #4,d2            ; x0x0x
  390.         lsl.b    #4,d2            ; x0xx0
  391.         lsl.w    #4,d2            ; xxx00
  392.         lsr.l    #8,d2            ; 00xxx
  393.         and.l    #$f0f0f,d3
  394.         lsl.b    #4,d3            ; x0xx0
  395.         lsl.w    #4,d3            ; xxx00
  396.         lsr.l    #8,d3            ; 00xxx
  397.         move.w    d5,(a0)+
  398.         move.w    d2,(a0)+
  399.         move.w    d5,(a1)+
  400.         move.w    d3,(a1)+
  401.         addq.w    #2,d5
  402.         dbra    d1,.colloop
  403.         add.l    #33*4,a0
  404.         add.l    #33*4,a1
  405.         add.l    #$2000,d6
  406.         add.l    #$2000,d7
  407.         dbra    d0,.bankloop
  408.         move.l    #-2,(a0)
  409.         rts
  410. .setbplptrs:    swap.w    d0
  411.         move.w    d0,(a0)
  412.         swap.w    d0
  413.         move.w    d0,4(a0)
  414.         addq.l    #8,a0
  415.         add.l    #40*256,d0
  416.         dbra    d1,.setbplptrs
  417.         rts
  418. .cp:        dc.w    0        
  419.  
  420. mnu_initrnd:    lea    mnu_palette+256,a1
  421.         move.w    #255,d0
  422. .parityloop:    move.b    d0,d1
  423.         and.w    #$1,d1
  424.         move.b    d0,d2
  425.         lsr.w    #2,d2
  426.         and.w    #$1,d2
  427.         eor.w    d2,d1
  428.         move.b    d0,d2
  429.         lsr.w    #3,d2
  430.         and.w    #$1,d2
  431.         eor.w    d2,d1
  432.         move.b    d0,d2
  433.         lsr.w    #5,d2
  434.         and.w    #$1,d2
  435.         eor.w    d2,d1
  436.         move.b    d1,-(a1)
  437.         dbra    d0,.parityloop
  438.         move.l    a1,a4            ; a4=Parity buffer
  439.         move.l    #'TBL!',d3        ; Random seed
  440.         lea    mnu_morescreen+6*40*256,a0
  441.         move.w    #40*256+8192-1,d0
  442. .loop:        moveq.l    #0,d1        ; d1=0
  443.         move.l    d3,d2        ; d2=Random seed
  444.         move.b    d2,d1        
  445.         and.b    #$fe,d2
  446.         move.b    (a4,d1.l),d1
  447.         or.b    d1,d2
  448.         ror.w    #1,d2
  449.         swap.w    d2
  450.         move.b    d2,d1        
  451.         and.b    #$fe,d2
  452.         move.b    (a4,d1.l),d1
  453.         or.b    d1,d2
  454.         ror.w    #1,d2
  455.         move.l    d2,d3
  456.         move.w    d2,d1
  457.         lsr.w    #8,d1
  458.         or.w    d1,d2
  459.         move.l    d2,d1
  460.         swap.w    d1
  461.         or.w    d1,d2
  462.         move.b    d2,(a0)+
  463.         dbra    d0,.loop
  464.         rts
  465.  
  466. mnu_movescreen:    move.w    mnu_screenpos,d0
  467.         and.w    #$ff,d0
  468.         mulu    #40,d0
  469.         add.l    #mnu_screen,d0
  470.         lea    mnu_bplptrs+2,a0
  471.         moveq.l    #1,d1
  472. .loop:        swap.w    d0
  473.         move.w    d0,(a0)
  474.         swap.w    d0
  475.         move.w    d0,4(a0)
  476.         addq.l    #8,a0
  477.         add.l    #40*256*2,d0
  478.         dbra    d1,.loop
  479.         addq.w    #1,mnu_screenpos
  480.         rts
  481.  
  482. mnu_createpalette:
  483.         lea    mnu_backpal,a0
  484.         lea    mnu_firepal,a1
  485.         lea    mnu_fontpal,a2
  486.         lea    mnu_palette+256*4,a3
  487.         move.w    #255,d0
  488. .loop:        move.w    d0,d1
  489.         and.w    #$e0,d1        
  490.         beq.s    .next
  491.         lsr.w    #5,d1
  492.         move.l    (a2,d1.w*4),-(a3)
  493.         bra.s    .cont
  494. .next:        move.w    d0,d1
  495.         and.w    #$1c,d1    
  496.         beq.s    .next1
  497.         lsr.w    #2,d1
  498.  
  499.         move.w d0,d2
  500.         and.w #$3,d2
  501.         
  502.         moveq #0,d3
  503.         move.b 3(a1,d1.w*4),d3
  504.         
  505.         moveq #0,d4
  506.         move.b 3(a1,d2.w*4),d4
  507.         add.w d4,d3
  508.         cmp.w #255,d3
  509.         ble.s .okmax1
  510.         move.b #255,d3
  511. .okmax1
  512.         move.b d3,-(a3)        
  513.  
  514.         moveq #0,d3
  515.         move.b 2(a1,d1.w*4),d3
  516.         
  517.         muls #3,d3
  518.         asr.w #2,d3
  519.         
  520.         moveq #0,d4
  521.         move.b 2(a1,d2.w*4),d4
  522.         add.w d4,d3
  523.         cmp.w #255,d3
  524.         ble.s .okmax2
  525.         move.b #255,d3
  526. .okmax2
  527.         move.b d3,-(a3)        
  528.  
  529.  
  530.         moveq #0,d3
  531.         move.b 1(a1,d1.w*4),d3
  532.         moveq #0,d4
  533.         move.b 1(a1,d2.w*4),d4
  534.         add.w d4,d3
  535.         cmp.w #255,d3
  536.         ble.s .okmax3
  537.         move.b #255,d3
  538. .okmax3
  539.         move.w d3,-(a3)        
  540.         
  541.  
  542.  
  543. ;        move.l    (a1,d1.w*4),-(a3)
  544.         bra.s    .cont
  545. .next1:        move.w    d0,d1
  546.         and.w    #$3,d1
  547.         move.l    (a0,d1.w*4),-(a3)
  548. .cont:        dbra    d0,.loop
  549.         rts    
  550.  
  551.  
  552. mnu_fadespeed    =    16
  553.  
  554. mnu_fadein:    clr.w    mnu_fadefactor
  555.         moveq.l    #256/mnu_fadespeed-1,d0
  556. .loop:        move.l    d0,-(a7)
  557. .wsync:        cmp.b    #$80,$dff006
  558.         blt.s    .wsync
  559.         cmp.b    #$90,$dff006
  560.         bgt.s    .wsync
  561.         bsr.w    mnu_fade
  562. .wsync2:    cmp.b    #$a0,$dff006
  563.         blt.s    .wsync2
  564.         add.w    #mnu_fadespeed,mnu_fadefactor
  565.         move.l    (a7)+,d0
  566.         dbra    d0,.loop
  567.         move.w    #255,mnu_fadefactor
  568. .wsync3:    cmp.b    #$80,$dff006
  569.         blt.s    .wsync3
  570.         cmp.b    #$90,$dff006
  571.         bgt.s    .wsync3
  572.         bsr.w    mnu_fade
  573.         rts
  574.  
  575. mnu_fadeout:    move.w    #255,mnu_fadefactor
  576.         moveq.l    #256/mnu_fadespeed-1,d0
  577. .loop:        move.l    d0,-(a7)
  578. ;        bsr.w    mnu_docursor
  579. .wsync:        cmp.b    #$80,$dff006
  580.         blt.s    .wsync
  581.         cmp.b    #$90,$dff006
  582.         bgt.s    .wsync
  583.         bsr.w    mnu_fade
  584. .wsync2:    cmp.b    #$a0,$dff006
  585.         blt.s    .wsync2
  586.         sub.w    #mnu_fadespeed,mnu_fadefactor
  587.         move.l    (a7)+,d0
  588.         dbra    d0,.loop
  589.         clr.w    mnu_fadefactor
  590. .wsync3:    cmp.b    #$80,$dff006
  591.         blt.s    .wsync3
  592.         cmp.b    #$90,$dff006
  593.         bgt.s    .wsync3
  594.         bsr.w    mnu_fade
  595.         rts
  596.  
  597. mnu_fadefactor:    dc.w    0
  598.  
  599. mnu_fade:    lea    mnu_palette,a2
  600.         moveq.l    #7,d0
  601.         lea    mnu_colptrs+2,a0
  602.         lea    mnu_colptrs+2+33*4,a1
  603.         move.w    mnu_fadefactor,d7
  604.         move.l    #$f0f0f0,d5
  605.         move.l    #$ff,d6
  606. .bankloop:    moveq.l    #31,d1
  607.         addq.l    #4,a0
  608.         addq.l    #4,a1
  609. .colloop:    moveq.l    #0,d4
  610.         move.l    (a2)+,d2
  611.  
  612.     REPT    2
  613.         move.l    d2,d3
  614.         and.w    d6,d3
  615.         mulu    d7,d3
  616.         divu    d6,d3
  617.         move.b    d3,d4
  618.         ror.l    #8,d4
  619.         ror.l    #8,d2
  620.     ENDR
  621.         move.l    d2,d3
  622.         and.w    d6,d3
  623.         mulu    d7,d3
  624.         divu    d6,d3
  625.         move.b    d3,d4
  626.         ror.l    #8,d4
  627.         ror.l    #8,d4
  628.         move.l    d4,d3
  629.         and.l    d5,d3
  630.         lsr.l    #4,d3            ; x0x0x
  631.         lsl.b    #4,d3            ; x0xx0
  632.         lsl.w    #4,d3            ; xxx00
  633.         lsr.l    #8,d3            ; 00xxx
  634.         and.l    #$f0f0f,d4
  635.         move.w    d3,(a0)
  636.         lsl.b    #4,d4            ; x0xx0
  637.         lsl.w    #4,d4            ; xxx00
  638.         lsr.l    #8,d4            ; 00xxx
  639.         addq.l    #4,a0
  640.         move.w    d4,(a1)
  641.         addq.l    #4,a1
  642.         dbra    d1,.colloop
  643.         add.l    #33*4,a0
  644.         add.l    #33*4,a1
  645.         dbra    d0,.bankloop
  646.         
  647.         rts
  648.  
  649.  
  650.  
  651.  
  652. mnu_printxy:;in:a0,d0,d1=Text ptr,XPos,YPos    (XPos in words YPos in pixels)
  653.         lea    mnu_font,a3
  654.         lea    mnu_font+176*40,a4
  655.         lea    mnu_font+176*40*2,a5
  656.         moveq.l    #40,d7
  657.         moveq.l    #20,d6
  658.         move.l    #40*16,d5
  659.         mulu    d7,d1
  660.         add.w    d0,d1
  661.         add.l    #mnu_morescreen+40*256*3,d1
  662.         move.l    d1,a1            ; a1=Ptr
  663.         move.l    a1,a2
  664. .loop:        move.b    (a0)+,d2
  665.         beq    .exit
  666.         move.l    mnu_printdelay,timer
  667. .w8a:        tst.l    timer
  668.         bne.s    .w8a
  669.         and.l    #$ff,d2
  670.         sub.w    #32,d2
  671.         bge.s    .ok
  672.         move.l    a2,a1
  673.         add.l    #20*40,a1
  674.         move.l    a1,a2
  675.         bra.s    .loop
  676. .ok:        divu    d6,d2
  677.         move.w    d2,d3        ; d3=Y
  678.         swap.w    d2        ; d2=X
  679.         mulu    d5,d3        ; d3=Y Addy
  680.         lsl.w    #1,d2
  681.         add.w    d2,d3        ; d3=Addy Offset
  682.         move.l    a1,a6
  683.         moveq.l    #15,d2
  684. .yloop:
  685.         move.w    (a3,d3.l),(a6)
  686.         move.w    (a4,d3.l),40*256(a6)
  687.         move.w    (a5,d3.l),40*256*2(a6)
  688.         
  689.         add.l    d7,d3
  690.         add.l    d7,a6    
  691.         
  692.         dbra    d2,.yloop
  693.         
  694.         addq.l    #2,a1
  695.         bra    .loop
  696. .exit:        rts
  697.  
  698. mnu_dofire:    btst.b    #0,main_counter+3
  699.         beq.s    .skip
  700.         rts
  701. .skip:        move.l    #mnu_bltint,main_bltint
  702.         move.w    $dff006,d0
  703.         add.w    d0,mnu_rnd
  704.         tst.b    $dff002
  705.         
  706.         
  707. .w8:        tst.w    mnu_bltbusy
  708.         beq.s    .notdoneyet
  709.         rts    
  710. .notdoneyet:
  711. .w82        btst.b    #6,$dff002
  712.         bne.s    .w82
  713.         
  714.         lea    mnu_sourceptrs,a0
  715.         move.l    (a0),d0
  716.         move.l    4(a0),(a0)
  717.         move.l    8(a0),4(a0)
  718.         move.l    d0,8(a0)
  719.         lea    $dff000,a6
  720.         st.b    mnu_bltbusy
  721.         move.w    #$0040,$9c(a6)            ; Clear BLT req
  722.         move.w    #$8040,$9a(a6)            ; Enable BLT int
  723.         move.w    #$8200!%1000000,$96(a6)        ; Enable blitter dma
  724.         bsr.w    mnu_bltint
  725.         rts
  726.  
  727. mnu_bltint:    bsr.w    .getrnd
  728.         lea    $dff000,a6
  729.         move.l    .passptr,a0
  730.         move.l    (a0),d0
  731.         beq.s    .last
  732.         addq.l    #4,.passptr
  733.         move.l    d0,a0
  734.         jmp    (a0)
  735. .last:        move.w    #$0040,$9a(a6)            ; Disable BLT int
  736.         move.w    #%1000000,$96(a6)        ; Disable blitter dma
  737.         move.l    #.passlist,.passptr
  738.         clr.w    mnu_bltbusy
  739.         rts
  740. .getrnd:    moveq.l    #0,d0
  741.         move.w    mnu_rnd,d0
  742.         and.l    #8190,d0
  743.         add.l    #mnu_morescreen+6*40*256,d0
  744.         move.l    d0,mnu_rndptr
  745.         addq.w    #5,mnu_rnd
  746.         rts
  747. .rnd:        dc.w    0
  748. .passptr:    dc.l    .passlist
  749. .passlist:    dc.l    mnu_pass1
  750.         dc.l    mnu_pass2
  751.         dc.l    mnu_pass3
  752.         dc.l    0
  753.  
  754. mnu_rnd:    dc.w    0
  755. mnu_bltbusy:    dc.w    0
  756.  
  757. mnu_speed    =    1
  758. mnu_size    =    256
  759.  
  760. mnu_subtract:    dc.l    0
  761. mnu_count:    dc.w    0
  762.  
  763. mnu_pass1:    clr.l    mnu_subtract
  764.         move.w    mnu_count,d0
  765.         addq.w    #1,mnu_count
  766.         and.w    #$3,d0
  767.         beq.s    .l1
  768.         cmp.w    #1,d0
  769.         bne.s    .normal
  770.         move.l    #-2,mnu_subtract
  771.         move.l    #$fff80000,$40(a6)        ; D=A+BC
  772.         bra.s    .cont
  773. .l1:        move.l    #$1ff80000,$40(a6)        ; D=A+BC
  774.         bra.s    .cont
  775. .normal:    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  776. .cont:        move.l    #$ffffffff,$44(a6)        ; Masks A
  777.         move.l    #$00000000,$60(a6)        ; CB modulo
  778.         move.l    #$00000000,$64(a6)        ; AD modulo
  779.         move.l    #mnu_morescreen+mnu_speed*40,$48(a6) ; Source C
  780.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  781.         move.l    mnu_sourceptrs,d0
  782.         sub.l    mnu_subtract,d0
  783.         move.l    d0,$50(a6)            ; Source A
  784.         move.l    #mnu_morescreen,$54(a6)        ; Dest D
  785.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  786.         rts
  787.  
  788. mnu_pass2:;    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  789. ;        move.l    #$ffffffff,$44(a6)        ; Masks A
  790. ;        move.l    #$00000000,$60(a6)        ; CB modulo
  791. ;        move.l    #$00000000,$64(a6)        ; AD modulo
  792.         move.l    #mnu_morescreen+40*256+mnu_speed*40,$48(a6) ; Source C
  793.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  794.         move.l    mnu_sourceptrs+4,d0
  795.         sub.l    mnu_subtract,d0
  796.         move.l    d0,$50(a6)            ; Source A
  797.         move.l    #mnu_morescreen+40*256,$54(a6)        ; Dest D
  798.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  799.         rts
  800.  
  801.  
  802. mnu_pass3:;    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  803. ;        move.l    #$ffffffff,$44(a6)        ; Masks A
  804. ;        move.l    #$00000000,$60(a6)        ; CB modulo
  805. ;        move.l    #$00000000,$64(a6)        ; AD modulo
  806.         move.l    #mnu_morescreen+40*256*2+mnu_speed*40,$48(a6) ; Source C
  807.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  808.         move.l    mnu_sourceptrs+8,d0
  809.         sub.l    mnu_subtract,d0
  810.         move.l    d0,$50(a6)            ; Source A
  811.         move.l    #mnu_morescreen+40*256*2,$54(a6)        ; Dest D
  812.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  813.         rts
  814.         
  815. mnu_cls:    lea    mnu_morescreen+40*256*6,a1
  816.         moveq.l    #0,d1
  817.         move.w    #40*256*3/16-1,d0
  818. .loop:        
  819.         REPT    4
  820.         move.l    d1,-(a1)
  821.         ENDR                
  822.         dbra    d0,.loop
  823.         rts
  824.  
  825. mnu_animcursor:    btst    #0,main_counter+3
  826.         beq.s    .skip
  827.         move.l    mnu_frameptr,a0
  828.         move.b    (a0),mnu_arrow
  829.         tst.b    1(a0)
  830.         beq.s    .skip
  831.         cmp.b    #40,1(a0)
  832.         bhi.s    .ok
  833.         moveq.l    #0,d0
  834.         move.b    1(a0),d0
  835.         sub.l    d0,mnu_frameptr
  836. .ok:        addq.l    #1,mnu_frameptr
  837. .skip:        rts
  838.  
  839.  
  840.  
  841.  
  842. mnu_domenu:;in:    a0=Menu ptr
  843. ;        bsr.w    key_flushbuffer
  844. .redraw:    move.l    a0,-(a7)
  845.         bsr.w    mnu_openmenu        ; Open new menu
  846.         move.l    (a7)+,a0
  847. .loop:        movem.l    a0,-(a7)
  848.         bsr.w    mnu_update
  849.         movem.l    (a7)+,a0
  850.         move.l    a0,-(a7)
  851.         bsr.w    mnu_waitmenu        ; Wait for option
  852.         move.l    (a7)+,a0
  853.         moveq.l    #0,d2
  854.         move.w    mnu_row,d2
  855.         divu    14(a0),d2
  856.         swap.w    d2
  857.         move.w    d2,mnu_currentsel
  858.         tst.l    d1
  859.         beq.s    .ok
  860.         cmp.w    #42,d1
  861.         beq.w    .left
  862.         cmp.w    #41,d1
  863.         beq.w    .right
  864. .ok:        cmp.w    #-1,d0            ; Esc ???
  865.         beq.w    .exit            ; Yepp exit
  866.         move.l    16(a0,d0.w*8),d1    ; Get option type
  867.         tst.l    d1            ; 0=Do Nothing ???
  868.         beq.s    .loop        
  869.         cmp.l    #1,d1            ; 1=Sub menu
  870.         beq.w    .newmenu
  871.         cmp.l    #2,d1            ; 2=Exit sub
  872.         beq.w    .exit
  873.         cmp.l    #3,d1
  874.         beq.w    .bsr
  875.         cmp.l    #4,d1
  876.         beq.w    .left
  877.         cmp.l    #5,d1
  878.         beq.w    .leftsl
  879.         cmp.l    #6,d1
  880.         beq.w    .jump
  881.         cmp.l    #7,d1
  882.         beq.w    .changemenu
  883.         cmp.l    #8,d1
  884.         beq.w    .doraw
  885.         cmp.l    #9,d1
  886.         beq.w    .doload
  887.         cmp.l    #10,d1
  888.         beq.w    .dosave
  889. .wrong:        move.l    #mnu_errcursanim,mnu_frameptr
  890.         bra.w    .loop            ; Strange option ??? Loop
  891. .dosave:    movem.l    d0-a6,-(a7)
  892.         move.l    20(a0,d0.w*8),a0
  893.         move.w    mnu_currentlevel,(a0)
  894.         bsr.w    mnu_savelevel
  895.         movem.l    (a7)+,d0-a6
  896.     ;    bra.w    .loop
  897.     bra.w    .exit
  898. .doload:    movem.l    d0-a6,-(a7)
  899.         move.l    20(a0,d0.w*8),a0
  900.         move.w    (a0),mnu_currentlevel
  901.         bsr.w    mnu_loadlevel
  902.         movem.l    (a7)+,d0-a6
  903.     ;bra.w    .loop
  904.     bra.w    .exit
  905. .doraw:        movem.l    d0-a6,-(a7)
  906.         move.l    #mnu_buttonanim,mnu_frameptr
  907.         move.l    20(a0,d0.w*8),a0
  908. .rawloop:    move.l    a0,-(a7)
  909.         bsr.w    mnu_getrawvalue
  910.         move.l    (a7)+,a0
  911.         cmp.w    (a0),d0
  912.         beq.s    .rawcont
  913.         cmp.w    #69,d0
  914.         beq.s    .rawcont
  915.         lea    mnu_rawkeys,a1
  916. .tstraw:    move.w    (a1)+,d1
  917.         cmp.w    #$ffff,d1
  918.         beq.s    .rawok
  919.         cmp.w    d0,d1
  920.         bne.s    .tstraw
  921.         move.l    #mnu_errbutanim,mnu_frameptr
  922.         bra.s    .rawloop
  923. .rawok:        move.w    d0,(a0)
  924. .rawcont:    move.l    #mnu_cursanim,mnu_frameptr
  925.         movem.l    (a7)+,d0-a6
  926.         bra.w    .loop
  927. .bsr:        movem.l    d0-a6,-(a7)
  928.         move.l    20(a0,d0.w*8),a0
  929.         jsr    (a0)
  930.         movem.l    (a7)+,d0-a6
  931.         bra.w    .redraw
  932. .jump:        move.l    20(a0,d0.w*8),a0
  933.         move.l    mnu_mainstack,a7
  934.         jmp    (a0)
  935. ;---------------------------------------------------------------------------
  936. .left:        move.l    16(a0,d0.w*8),d1
  937.         cmp.l    #4,d1
  938.         bne.s    .leftsl        
  939.         move.l    20(a0,d0.w*8),a1
  940.         move.l    10(a1),a2
  941.         move.w    8(a1),d0
  942.         add.w    d0,(a2)
  943.         bra.w    .loop
  944. .leftsl:    cmp.l    #5,d1
  945.         bne.w    .wrong
  946.         move.l    20(a0,d0.w*8),a1
  947.         move.l    6(a1),a2
  948.         addq.w    #1,(a2)
  949.         bra.w    .loop        
  950. .right:        move.l    16(a0,d0.w*8),d1
  951.         cmp.l    #4,d1
  952.         bne.s    .rightsl        
  953.         move.l    20(a0,d0.w*8),a1
  954.         move.l    10(a1),a2
  955.         move.w    8(a1),d0
  956.         sub.w    d0,(a2)
  957.         bra.w    .loop
  958. .rightsl:    cmp.l    #5,d1
  959.         bne.w    .wrong
  960.         move.l    20(a0,d0.w*8),a1
  961.         move.l    6(a1),a2
  962.         subq.w    #1,(a2)
  963.         bra.w    .loop
  964. ;------------------------------------------------------------------ New menu --
  965. .changemenu:    move.l    20(a0,d0.w*8),a0
  966.         bra.w    .redraw
  967. .newmenu:    move.l    a0,-(a7)
  968.         move.l    20(a0,d0.w*8),a0    ; Set new menu
  969.         bsr.w    mnu_domenu
  970.         move.l    (a7)+,a0
  971.         bra.w    .redraw
  972. .exit:        rts
  973.  
  974. mnu_redraw:
  975.         move.w    (a0),d0
  976.         move.w    2(a0),d1
  977.         move.l    4(a0),a0
  978.         bsr.w    mnu_printxy
  979.  rts
  980.  
  981. mnu_openmenu:;in:a0=Ptr to menu
  982. ;        bsr.w    key_flushbuffer
  983.         move.w    mnu_currentlevel,d0
  984.         add.w    #65,d0
  985.         move.b    d0,mnu_mainleveltext
  986.         move.l    a0,-(a7)
  987.         move.l    #0,mnu_printdelay
  988.         bsr.w    mnu_cls
  989.         move.l    #35,timer
  990. .w8a:        tst.l    timer
  991.         bne.s    .w8a        
  992.         move.l    (a7)+,a0
  993.         move.l    a0,-(a7)
  994.         move.w    (a0),d0
  995.         move.w    2(a0),d1
  996.         move.l    4(a0),a0
  997.         bsr.w    mnu_printxy
  998.         move.l    (a7)+,a0
  999.         move.w    8(a0),mnu_curx
  1000.         move.w    10(a0),mnu_cury
  1001.         move.w    12(a0),mnu_spread
  1002.         move.w    14(a0),mnu_items
  1003.         move.w    14(a0),d0
  1004.         mulu    #3000,d0
  1005.         move.w    d0,mnu_row
  1006.         move.w    d0,mnu_oldrow
  1007.         bsr.w    mnu_update
  1008.         rts
  1009.  
  1010. mnu_waitmenu:;out:    d0=Selection number
  1011. ;        move.l    #mnu_cursanim,mnu_frameptr
  1012.         clr.l    mnu_printdelay
  1013.  
  1014.  
  1015.  
  1016. .loop:        moveq.l    #0,d1
  1017.         move.w    mnu_oldrow,d1
  1018.         cmp.w    mnu_row,d1
  1019.         beq.s    .skip
  1020. ;        move.l    #mnu_cursanim,mnu_frameptr
  1021.         divu    mnu_items,d1
  1022.         swap.w    d1
  1023.         mulu    mnu_spread,d1
  1024.         add.w    mnu_cury,d1
  1025.         move.w    mnu_curx,d0
  1026.         lea    mnu_cleararrow,a0
  1027.         bsr.w    mnu_printxy
  1028. .skip:
  1029.  
  1030. .w8key:        bsr.w    mnu_docursor
  1031.         jsr    key_readkey
  1032.         tst.w    d0
  1033.         beq.s    .w8key
  1034.         cmp.b    #69,d0
  1035.         beq.s    .exit
  1036.         cmp.b    #77,d0        ; Down Arrow
  1037.         beq.s    .down
  1038.         cmp.b    #76,d0
  1039.         beq.s    .up
  1040.         cmp.b    #68,d0
  1041.         beq.s    .quit
  1042.         cmp.b    #64,d0
  1043.         beq.s    .quit
  1044.         cmp.b    #78,d0
  1045.         beq.s    .sliderr
  1046.         cmp.b    #79,d0
  1047.         beq.s    .sliderl
  1048.         move.l    #mnu_errcursanim,mnu_frameptr
  1049.         bra.w    .loop
  1050. .exit:        moveq.l    #-1,d0        ; Esc key
  1051.         moveq.l    #0,d1
  1052.         rts
  1053. .sliderr:    moveq.l    #41,d1
  1054.         bra.s    .cpcont
  1055. .sliderl:    moveq.l    #42,d1
  1056.         bra.s    .cpcont
  1057. .quit:        moveq.l    #0,d1
  1058. .cpcont:    move.w    mnu_row,d0
  1059.         divu    mnu_items,d0
  1060.         swap.w    d0
  1061.         and.l    #$ffff,d0
  1062.         rts
  1063. .down:        addq.w    #1,mnu_row
  1064.         bra.w    .loop
  1065. .up:        subq.w    #1,mnu_row
  1066.         bra.w    .loop
  1067.  
  1068. mnu_docursor:    moveq.l    #0,d1
  1069.         move.w    mnu_row,d1
  1070.         move.w    d1,mnu_oldrow
  1071.         divu    mnu_items,d1
  1072.         swap.w    d1
  1073.         mulu    mnu_spread,d1
  1074.         add.w    mnu_cury,d1
  1075.         move.w    mnu_curx,d0
  1076.         lea    mnu_arrow,a0
  1077.         
  1078.         bsr.w    mnu_printxy
  1079.         rts
  1080.  
  1081. mnu_docursor1:    moveq.l    #0,d1
  1082.         move.w    mnu_row,d1
  1083.         divu    mnu_items,d1
  1084.         swap.w    d1
  1085.         mulu    mnu_spread,d1
  1086.         add.w    mnu_cury,d1
  1087.         move.w    mnu_curx,d0
  1088.         lea    mnu_arrow,a0
  1089.  
  1090.         bsr.w    mnu_printxy
  1091.         rts
  1092.         
  1093. mnu_update:;in: a0=Ptr to menu
  1094.         move.w    14(a0),d7
  1095.         subq.w    #1,d7
  1096.         move.w    10(a0),d1        ; d1=YPos
  1097.         move.w    8(a0),d0
  1098.         move.l    a0,a1
  1099.         add.l    #16,a1
  1100. .itemloop:    move.l    (a1)+,d2
  1101.         cmp.l    #4,d2            ; Slider ?
  1102.         beq.s    .doslider
  1103.         cmp.l    #5,d2            ; Slider ?
  1104.         beq.s    .docycler
  1105.         cmp.l    #8,d2
  1106.         beq.s    .dorawkey
  1107.         cmp.l    #9,d2
  1108.         beq.s    .doloadlevel
  1109.         cmp.l    #10,d2
  1110.         beq.s    .doloadlevel
  1111. .continue:    add.w    12(a0),d1
  1112.         addq.l    #4,a1
  1113.         dbra    d7,.itemloop
  1114.         rts
  1115. .doslider:    movem.l    d0-a6,-(a7)
  1116.         move.l    (a1),a0            ; a0=Slider ptr
  1117.         bsr.w    mnu_putslider    
  1118.         movem.l    (a7)+,d0-a6
  1119.         bra.s    .continue        
  1120. .docycler:    movem.l    d0-a6,-(a7)
  1121.         move.l    (a1),a0            ; a0=Cycler ptr
  1122.         bsr.w    mnu_putcycler    
  1123.         movem.l    (a7)+,d0-a6
  1124.         bra.s    .continue
  1125. .dorawkey:    movem.l    d0-a6,-(a7)
  1126.         move.l    (a1),a0            ; a0=Ptr to value
  1127.         move.w    (a0),d3
  1128.         add.w    #132,d3
  1129.         add.w    #2,d0
  1130.         move.b    d3,mnu_rawprint
  1131.         lea    mnu_rawprint,a0
  1132.         bsr.w    mnu_printxy
  1133.         movem.l    (a7)+,d0-a6
  1134.         bra.s    .continue
  1135. .doloadlevel:    movem.l    d0-a6,-(a7)
  1136.         move.l    (a1),a0
  1137.         move.w    (a0),d2            ; d0=Level no
  1138.         add.w    #65,d2
  1139.         move.b    d2,mnu_levelno
  1140.         addq.w    #2,d0
  1141.         lea    mnu_leveltext,a0
  1142.         bsr.w    mnu_printxy
  1143.         movem.l    (a7)+,d0-a6
  1144.         bra.s    .continue
  1145.  
  1146. mnu_putslider:;in:    d0,d1,d7,a0=Xpos,Ypos,Spread,Slider ptr
  1147.         add.w    (a0),d0
  1148.         add.w    2(a0),d1
  1149.         move.w    d0,.xpos
  1150.         movem.l    d0-d1/a0,-(a7)
  1151.         lea    mnu_leftslider,a0
  1152.         bsr.w    mnu_printxy
  1153.         movem.l    (a7)+,d0-d1/a0
  1154.         addq.w    #2,d0
  1155.         move.w    6(a0),d2
  1156.         lsr.w    #4,d2
  1157.         tst.w    d2
  1158.         beq.s    .skip
  1159.         move.w    d2,d4
  1160.         movem.l    d0-d1/a0,-(a7)
  1161.         lea    mnu_sliderspace,a0
  1162.         move.l    a0,a1
  1163.         subq.w    #1,d2
  1164. .loop:        move.b    #59,(a1)+
  1165.         dbra    d2,.loop
  1166.         clr.b    (a1)
  1167.         bsr.w    mnu_printxy
  1168.         movem.l    (a7)+,d0-d1/a0
  1169.         add.w    d4,d0
  1170.         add.w    d4,d0
  1171. .skip:        move.w    6(a0),d2
  1172.         and.w    #$f,d2
  1173.         beq.w    .skip2
  1174.         move.w    d2,d5
  1175.         subq.w    #1,d2
  1176.         moveq.l    #0,d3
  1177. .loop1:        ror.w    #1,d3
  1178.         or.w    #$8000,d3
  1179.         dbra    d2,.loop1
  1180.         movem.l    d0-d1,-(a7)
  1181.         mulu    d7,d1
  1182.         add.w    d0,d1
  1183.         add.l    #mnu_morescreen+40*256*3,d1
  1184.         move.l    d1,a4            ; a4=Screen Ptr
  1185.         movem.l    (a7)+,d0-d1
  1186.         swap.w    d3
  1187.         clr.w    d3
  1188.         moveq.l    #15,d2
  1189.         move.l    a4,a5
  1190.         move.l    mnu_sliddat,a3
  1191. .loop2:        move.l    (a3),d4
  1192.         and.l    d3,d4
  1193.         move.l    d4,(a4)
  1194.         move.l    176*40(a3),d4
  1195.         and.l    d3,d4
  1196.         move.l    d4,40*256(a4)
  1197.         move.l    176*40*2(a3),d4
  1198.         and.l    d3,d4
  1199.         move.l    d4,40*256*2(a4)
  1200.         add.l    #40,a3
  1201.         add.l    #40,a4
  1202.         dbra    d2,.loop2
  1203.         move.l    a5,a4
  1204.         moveq.l    #15,d2
  1205.         move.l    mnu_sliddat,a3
  1206. .loop3:        move.l    2(a3),d4
  1207.         lsr.l    d5,d4
  1208.         or.l    d4,(a4)
  1209.         move.l    2+176*40(a3),d4
  1210.         lsr.l    d5,d4
  1211.         or.l    d4,40*256(a4)
  1212.         move.l    2+176*40*2(a3),d4
  1213.         lsr.l    d5,d4
  1214.         or.l    d4,40*256*2(a4)
  1215.         add.l    #40,a3
  1216.         add.l    #40,a4
  1217.         dbra    d2,.loop3
  1218.         bra.s    .cont1
  1219. .skip2:        movem.l    d0/d1/a0,-(a7)
  1220.         lea    mnu_rightslider,a0
  1221.         bsr.w    mnu_printxy
  1222.         movem.l    (a7)+,d0/d1/a0
  1223. .cont1:        move.l    10(a0),a1        ; Value 2 change ptr
  1224.         move.w    (a1),d0
  1225.         cmp.w    #0,d0
  1226.         bge.s    .ok1
  1227.         moveq.l    #0,d0
  1228. .ok1:        cmp.w    4(a0),d0
  1229.         ble.s    .ok2
  1230.         move.w    4(a0),d0
  1231. .ok2:        move.w    d0,(a1)
  1232.         mulu    6(a0),d0
  1233.         divu    4(a0),d0        ; d0=Slider position X
  1234.         sub.w    mnu_sliderwidth,d0
  1235.         move.w    .xpos,d2
  1236.         lsl.w    #3,d2
  1237.         add.w    d2,d0
  1238.         move.w    d0,d2
  1239.         and.l    #$f,d2
  1240.         lsr.w    #4,d0
  1241.         lsl.w    #1,d0
  1242.         addq.w    #2,d0
  1243.         and.l    #$ffff,d0
  1244.         mulu    d7,d1
  1245.         add.l    d0,d1
  1246.         add.l    #mnu_morescreen+40*256*3,d1
  1247.         move.l    d1,a4            ; a1=Screen ptr
  1248.         moveq.l    #15,d3
  1249.         move.l    mnu_sliddat,a3
  1250. .loop4:        move.l    6(a3),d4
  1251.         lsr.l    d2,d4
  1252.         or.l    d4,(a4)
  1253.         move.l    6+176*40(a3),d4
  1254.         lsr.l    d2,d4
  1255.         or.l    d4,40*256(a4)
  1256.         move.l    6+176*40*2(a3),d4
  1257.         lsr.l    d2,d4
  1258.         or.l    d4,40*256*2(a4)
  1259.         add.l    #40,a3
  1260.         add.l    #40,a4
  1261.         dbra    d3,.loop4
  1262.         rts
  1263. .xpos:        dc.w    0
  1264.  
  1265. mnu_putcycler:;in:    d0,d1,a0=Xpos,Ypos,Spread,Cycler ptr
  1266.         add.w    (a0),d0
  1267.         add.w    2(a0),d1
  1268.         move.l    6(a0),a1
  1269.         moveq.l    #0,d2
  1270.         move.w    (a1),d2
  1271.         divu    4(a0),d2
  1272.         swap.w    d2
  1273.         move.w    d2,(a1)
  1274.         move.l    10(a0,d2.w*4),a0
  1275.         bsr.w    mnu_printxy
  1276.         rts
  1277.  
  1278. mnu_plot:
  1279.  
  1280.         move.w #49,d7
  1281.         lea    mnu_sines,a0
  1282.         lea mnu_xsine0,a1
  1283.         move.l a0,a3
  1284.             
  1285. plotlist:
  1286.         
  1287.         move.w    (a1),d0
  1288.         and.w    #1022,d0
  1289.         move.w    (a0,d0.w),d1
  1290.         move.w    4(a1),d0
  1291.         and.w    #1022,d0
  1292.         add.w    (a0,d0.w),d1
  1293.         asr.w    #4,d1
  1294.         add.w    #160,d1
  1295.         move.w    2(a1),d0
  1296.         and.w    #1022,d0
  1297.         move.w    (a0,d0.w),d2
  1298.         move.w    6(a1),d0
  1299.         and.w    #1022,d0
  1300.         add.w    (a0,d0.w),d2
  1301.         asr.w    #4,d2
  1302.         add.w    #128,d2
  1303.         mulu    #40,d2
  1304.         move.w    d1,d0
  1305.         lsr.w    #3,d1
  1306.         add.w    d1,d2
  1307.         neg.w    d0
  1308.         addq.w    #$7,d0
  1309.         add.l    #mnu_morescreen,d2
  1310.         move.l    d2,a2
  1311.         bset.b    d0,(a2)
  1312.         bset.b    d0,40*256(a2)
  1313.         bset.b    d0,40*256*2(a2)
  1314.         
  1315.         REPT 4
  1316.         move.w (a3)+,d0
  1317.         and.w #3,d0
  1318.         add.w #2,d0
  1319.         add.w d0,(a1)+
  1320.         ENDR
  1321.         
  1322.         dbra d7,plotlist
  1323.         
  1324.         rts
  1325.  
  1326. mnu_getrawvalue:;out:    d0=Raw value
  1327.  
  1328.         bsr.w mnu_docursor1
  1329.         move.b lastpressed,d0
  1330.         beq.s mnu_getrawvalue
  1331.         move.b #0,lastpressed
  1332.         move.w #$ffff,mnu_oldrow
  1333.         rts
  1334.  
  1335.         ; Waits until a key is pressed the returns the raw value
  1336. ;        bsr.w    mnu_docursor1
  1337. ;        tst.b    key_keypressed
  1338. ;        bne.s    mnu_getrawvalue
  1339. ;.loop:        bsr.w    mnu_docursor1
  1340. ;        tst.b    key_keypressed
  1341. ;        beq.s    .loop
  1342. ;        move.b    key_rawkey,d0
  1343. ;        and.l    #$ff,d0
  1344. ;        move.l    d0,-(a7)
  1345. ;.oloop:        bsr.w    mnu_docursor1
  1346. ;        tst.b    key_keypressed
  1347. ;        bne.s    .oloop
  1348. ;        bsr.w    key_flushbuffer
  1349. ;        move.w    #$ffff,mnu_oldrow
  1350. ;        move.l    (a7)+,d0
  1351. ;        rts
  1352.  
  1353. mnu_test4quit:    clr.w    mnu_quitflag
  1354.         bsr.w    mnu_docursor
  1355.         jsr    key_readkey
  1356.         cmp.w    #27,d0
  1357.         beq.s    .quit
  1358.         cmp.w    #13,d0
  1359.         beq.s    .quit
  1360.         cmp.w    #32,d0
  1361.         beq.s    .quit
  1362.         tst.w    d0
  1363.         beq.s    .skip
  1364.         move.l    #mnu_errcursanim,mnu_frameptr
  1365. .skip:        moveq.l    #-1,d0
  1366.         tst.w    d0
  1367.         rts
  1368. .quit:        st.b    mnu_quitflag
  1369.         moveq.l    #0,d0
  1370.         tst.w    d0
  1371.         rts        
  1372.  
  1373. mnu_quitflag:    dc.w    0
  1374.  
  1375. mnu_playgame:    cmp.w    #1,mnu_playtype        ; Is it 2 player master ???
  1376.         bne.w    .noplayermaster
  1377.         lea    mnu_2pmastermenu,a0
  1378.         bsr.w    mnu_domenu
  1379.         cmp.w    #1,mnu_currentsel
  1380.         bne.s    .rts
  1381.         bsr.w    mnu_cls
  1382.         lea    mnu_slavewaittext,a0
  1383.     IFND    mnu_nowait
  1384.         moveq.l    #6,d0
  1385.         moveq.l    #60,d1
  1386.         bsr.w    mnu_printxy
  1387.         clr.w    mnu_spread
  1388.         move.w    #4,mnu_curx
  1389.         move.w    #140,mnu_cury
  1390.         bsr.w    mnu_wait4slave
  1391.         tst.w    mnu_quitflag
  1392.         beq.s    .playgame
  1393.         rts
  1394.     ENDC
  1395.         bra.s    .playgame
  1396. .rts:        rts
  1397. .noplayermaster:cmp.w    #2,mnu_playtype
  1398.         bne.w    .playgame
  1399.     IFND    mnu_nowait
  1400.         bsr.w    mnu_cls
  1401.         lea    mnu_masterwaittext,a0
  1402.         moveq.l    #6,d0
  1403.         moveq.l    #60,d1
  1404.         bsr.w    mnu_printxy
  1405.         clr.w    mnu_spread
  1406.         move.w    #4,mnu_curx
  1407.         move.w    #140,mnu_cury
  1408.         bsr.w    mnu_wait4master
  1409.         tst.w    mnu_quitflag
  1410.         beq.s    .playgame
  1411.         rts
  1412.     ENDC
  1413. .playgame:    bsr.w    mnu_clearscreen
  1414.         ;-------------------------------------- Jump to game here !! --
  1415.         move.w    mnu_playtype,d0
  1416.         lea    .playtypeptr,a0
  1417.         move.l    (a0,d0.w*4),a0
  1418.         jsr    (a0)
  1419.         bsr.w    mnu_setscreen
  1420.         rts
  1421. .playtypeptr:    dc.l    mnu_play1p
  1422.         dc.l    mnu_play2pMaster
  1423.         dc.l    mnu_play2pSlave
  1424.  
  1425.  
  1426. *******************************************************************************
  1427. *******************************************************************************
  1428. *******************************************************************************
  1429. *******************************************************************************
  1430.  
  1431. mnu_wait4slave:    ; Wait for the slave to connect.
  1432. .loop:        bsr.w    mnu_test4quit        ; Check for "cancel" (and cursor)
  1433.         beq.s    .rts            ; Cancel key was selected
  1434.  
  1435. ;.............. Do your tests here .................................
  1436. ;.............. if the slave connects just exit with a rts .........
  1437.  
  1438.     btst    #6,$bfe001
  1439.     bne.s    .loop
  1440. .loop1:    btst    #6,$bfe001
  1441.     beq.s    .loop1
  1442.  
  1443. .rts:        rts
  1444.  
  1445. *******************************************************************************
  1446.  
  1447. mnu_wait4master:; Wait for the master to connect.
  1448. .loop:        bsr.w    mnu_test4quit        ; Check for "cancel" (and cursor)
  1449.         beq.s    .rts            ; Cancel key was selected
  1450.  
  1451. ;.............. Do your tests here ..................................
  1452. ;.............. if the master connects just exit with a rts .........
  1453.  
  1454.     btst    #6,$bfe001
  1455.     bne.s    .loop
  1456. .loop1:    btst    #6,$bfe001
  1457.     beq.s    .loop1
  1458.  
  1459. .rts:        rts
  1460.  
  1461. *******************************************************************************
  1462.  
  1463. mnu_play1p:    ; Do the 1 player game stuff here
  1464.  
  1465. .loop:    btst    #6,$bfe001
  1466.     bne.s    .loop
  1467.  
  1468.         rts
  1469.  
  1470. *******************************************************************************
  1471.  
  1472. mnu_play2pMaster:; Do the 2 player master game stuff here
  1473.  
  1474. .loop:    btst    #6,$bfe001
  1475.     bne.s    .loop
  1476.  
  1477.         rts
  1478.  
  1479. *******************************************************************************
  1480.  
  1481. mnu_play2pSlave:; Do the 2 player slave game stuff here
  1482.  
  1483. .loop:    btst    #6,$bfe001
  1484.     bne.s    .loop
  1485.  
  1486.         rts
  1487.  
  1488. *******************************************************************************
  1489.  
  1490. mnu_loadlevel:    ; Level to load is in mnu_currentlevel.w
  1491.         ; Current menu item is in mnu_currentsel.w (0 based)
  1492.         rts
  1493.  
  1494. *******************************************************************************
  1495.  
  1496. mnu_savelevel:    ; Level to save is in mnu_currentlevel.w
  1497.            ; Current menu item is in mnu_currentsel.w (0 based)
  1498.               ; Or all saved levels in the mnu_levellist+n*2.w
  1499.         rts
  1500.  
  1501. *******************************************************************************
  1502.  
  1503. ;    include    "demo:System/KeyBoard.S"
  1504.  
  1505. ****************************************************************** Variables **
  1506.  
  1507. mnu_2plevel:    dc.w    0
  1508. mnu_currentsel:    dc.w    0    ; Containes the current menu item
  1509. mnu_currentlevel:
  1510. mnu_level:    dc.w    0    ; Current level choosen. 0=A,1=B...
  1511.  
  1512. mnu_playtype:    dc.w    0    ; Selected type of game. 0=1 player
  1513.                 ;             1=2 player master
  1514.                 ;             2=2 player slave
  1515. ;------------------------------------------------- Rawcodes for control keys --
  1516. mnu_rawkeys:    ;----------------------------- Here are all defined raw keys --
  1517. mnu_key00:    dc.w    $4f    ; Turn left
  1518. mnu_key01:    dc.w    $4e    ; Turn right
  1519. mnu_key02:    dc.w    $4c    ; Forwards
  1520. mnu_key03:    dc.w    $4d    ; Backwards
  1521. mnu_key04:    dc.w    101    ; Fire
  1522. mnu_key05:    dc.w    $40    ; Operate door
  1523. mnu_key06:    dc.w    97    ; Run
  1524. mnu_key07:    dc.w    103    ; Force sidestep
  1525. mnu_key08:    dc.w    57    ; Sidestep left
  1526. mnu_key09:    dc.w    58    ; Sidestep right
  1527. mnu_key10:    dc.w    34    ; Duck
  1528. mnu_key11:    dc.w    40    ; Look behind
  1529. mnu_key12:    dc.w    15    ; Jump
  1530. mnu_key13:    dc.w    27    ; Look up
  1531. mnu_key14:    dc.w    42    ; Look down
  1532. mnu_key15:    dc.w    41    ; Centre view
  1533. ;------------------------------------------- Put other reserved keys here !! --
  1534.         dc.w    69    ; Escape
  1535.         dc.w    1,2,3,4,5,6,7,8,9,10    ; Weapon selects
  1536.         dc.w    80    ; Zoom in on map
  1537.         dc.w    81    ; Zoom out on map
  1538.         dc.w    82    ; 4/8 Channel sound
  1539.         dc.w    83    ; Mono/Stereo sound
  1540.         dc.w    84    ; Recall message
  1541.         dc.w    85    ; Render quality
  1542.         dc.w    29    ; Map down left
  1543.         dc.w    30    ; Map down
  1544.         dc.w    31    ; Map down right
  1545.         dc.w    45    ; Map left
  1546.         dc.w    46    ; Center map
  1547.         dc.w    47    ; Map right
  1548.         dc.w    61    ; Map up left
  1549.         dc.w    62    ; Map up
  1550.         dc.w    63    ; Map up right
  1551.         dc.w    -1    ; End list with -1
  1552.  
  1553. mnu_levellist:;----------------------------- Current levels in the save list --
  1554. mnu_saved0:    dc.w    0        ; Level number for saved pos 0
  1555. mnu_saved1:    dc.w    1        
  1556. mnu_saved2:    dc.w    3
  1557. mnu_saved3:    dc.w    8
  1558. mnu_saved4:    dc.w    4
  1559. mnu_saved5:    dc.w    11
  1560.  
  1561. mnu_xsine0:    dc.w    0
  1562. mnu_xsine1:    dc.w    0
  1563. mnu_ysine0:    dc.w    0
  1564. mnu_ysine1:    dc.w    0
  1565.  
  1566.         ds.l 2*100
  1567.  
  1568. mnu_sines:
  1569.     dc.w    $0006,$0013,$001f,$002c,$0038,$0045,$0052,$005e,$006b,$0077
  1570.     dc.w    $0083,$0090,$009c,$00a9,$00b5,$00c1,$00ce,$00da,$00e6,$00f2
  1571.     dc.w    $00ff,$010b,$0117,$0123,$012f,$013b,$0147,$0153,$015f,$016a
  1572.     dc.w    $0176,$0182,$018d,$0199,$01a4,$01b0,$01bb,$01c6,$01d2,$01dd
  1573.     dc.w    $01e8,$01f3,$01fe,$0209,$0213,$021e,$0229,$0233,$023e,$0248
  1574.     dc.w    $0252,$025c,$0266,$0270,$027a,$0284,$028e,$0297,$02a1,$02aa
  1575.     dc.w    $02b4,$02bd,$02c6,$02cf,$02d8,$02e1,$02e9,$02f2,$02fa,$0303
  1576.     dc.w    $030b,$0313,$031b,$0323,$032a,$0332,$0339,$0341,$0348,$034f
  1577.     dc.w    $0356,$035d,$0364,$036a,$0371,$0377,$037d,$0383,$0389,$038f
  1578.     dc.w    $0395,$039a,$039f,$03a5,$03aa,$03af,$03b4,$03b8,$03bd,$03c1
  1579.     dc.w    $03c5,$03c9,$03cd,$03d1,$03d5,$03d8,$03dc,$03df,$03e2,$03e5
  1580.     dc.w    $03e7,$03ea,$03ed,$03ef,$03f1,$03f3,$03f5,$03f7,$03f8,$03f9
  1581.     dc.w    $03fb,$03fc,$03fd,$03fd,$03fe,$03ff,$03ff,$03ff,$03ff,$03ff
  1582.     dc.w    $03ff,$03fe,$03fd,$03fd,$03fc,$03fb,$03f9,$03f8,$03f7,$03f5
  1583.     dc.w    $03f3,$03f1,$03ef,$03ed,$03ea,$03e7,$03e5,$03e2,$03df,$03dc
  1584.     dc.w    $03d8,$03d5,$03d1,$03cd,$03c9,$03c5,$03c1,$03bd,$03b8,$03b4
  1585.     dc.w    $03af,$03aa,$03a5,$039f,$039a,$0395,$038f,$0389,$0383,$037d
  1586.     dc.w    $0377,$0371,$036a,$0364,$035d,$0356,$034f,$0348,$0341,$0339
  1587.     dc.w    $0332,$032a,$0323,$031b,$0313,$030b,$0303,$02fa,$02f2,$02e9
  1588.     dc.w    $02e1,$02d8,$02cf,$02c6,$02bd,$02b4,$02aa,$02a1,$0297,$028e
  1589.     dc.w    $0284,$027a,$0270,$0266,$025c,$0252,$0248,$023e,$0233,$0229
  1590.     dc.w    $021e,$0213,$0209,$01fe,$01f3,$01e8,$01dd,$01d2,$01c6,$01bb
  1591.     dc.w    $01b0,$01a4,$0199,$018d,$0182,$0176,$016a,$015f,$0153,$0147
  1592.     dc.w    $013b,$012f,$0123,$0117,$010b,$00ff,$00f2,$00e6,$00da,$00ce
  1593.     dc.w    $00c1,$00b5,$00a9,$009c,$0090,$0083,$0077,$006b,$005e,$0052
  1594.     dc.w    $0045,$0038,$002c,$001f,$0013,$0006,$fffa,$ffed,$ffe1,$ffd4
  1595.     dc.w    $ffc8,$ffbb,$ffae,$ffa2,$ff95,$ff89,$ff7d,$ff70,$ff64,$ff57
  1596.     dc.w    $ff4b,$ff3f,$ff32,$ff26,$ff1a,$ff0e,$ff01,$fef5,$fee9,$fedd
  1597.     dc.w    $fed1,$fec5,$feb9,$fead,$fea1,$fe96,$fe8a,$fe7e,$fe73,$fe67
  1598.     dc.w    $fe5c,$fe50,$fe45,$fe3a,$fe2e,$fe23,$fe18,$fe0d,$fe02,$fdf7
  1599.     dc.w    $fded,$fde2,$fdd7,$fdcd,$fdc2,$fdb8,$fdae,$fda4,$fd9a,$fd90
  1600.     dc.w    $fd86,$fd7c,$fd72,$fd69,$fd5f,$fd56,$fd4c,$fd43,$fd3a,$fd31
  1601.     dc.w    $fd28,$fd1f,$fd17,$fd0e,$fd06,$fcfd,$fcf5,$fced,$fce5,$fcdd
  1602.     dc.w    $fcd6,$fcce,$fcc7,$fcbf,$fcb8,$fcb1,$fcaa,$fca3,$fc9c,$fc96
  1603.     dc.w    $fc8f,$fc89,$fc83,$fc7d,$fc77,$fc71,$fc6b,$fc66,$fc61,$fc5b
  1604.     dc.w    $fc56,$fc51,$fc4c,$fc48,$fc43,$fc3f,$fc3b,$fc37,$fc33,$fc2f
  1605.     dc.w    $fc2b,$fc28,$fc24,$fc21,$fc1e,$fc1b,$fc18,$fc16,$fc13,$fc11
  1606.     dc.w    $fc0f,$fc0d,$fc0b,$fc09,$fc08,$fc07,$fc05,$fc04,$fc03,$fc03
  1607.     dc.w    $fc02,$fc01,$fc01,$fc01,$fc01,$fc01,$fc01,$fc02,$fc03,$fc03
  1608.     dc.w    $fc04,$fc05,$fc07,$fc08,$fc09,$fc0b,$fc0d,$fc0f,$fc11,$fc13
  1609.     dc.w    $fc16,$fc19,$fc1b,$fc1e,$fc21,$fc24,$fc28,$fc2b,$fc2f,$fc33
  1610.     dc.w    $fc37,$fc3b,$fc3f,$fc43,$fc48,$fc4c,$fc51,$fc56,$fc5b,$fc61
  1611.     dc.w    $fc66,$fc6b,$fc71,$fc77,$fc7d,$fc83,$fc89,$fc8f,$fc96,$fc9c
  1612.     dc.w    $fca3,$fcaa,$fcb1,$fcb8,$fcbf,$fcc7,$fcce,$fcd6,$fcdd,$fce5
  1613.     dc.w    $fced,$fcf5,$fcfd,$fd06,$fd0e,$fd17,$fd1f,$fd28,$fd31,$fd3a
  1614.     dc.w    $fd43,$fd4c,$fd56,$fd5f,$fd69,$fd72,$fd7c,$fd86,$fd90,$fd9a
  1615.     dc.w    $fda4,$fdae,$fdb8,$fdc2,$fdcd,$fdd7,$fde2,$fded,$fdf7,$fe02
  1616.     dc.w    $fe0d,$fe18,$fe23,$fe2e,$fe3a,$fe45,$fe50,$fe5c,$fe67,$fe73
  1617.     dc.w    $fe7e,$fe8a,$fe96,$fea1,$fead,$feb9,$fec5,$fed1,$fedd,$fee9
  1618.     dc.w    $fef5,$ff01,$ff0e,$ff1a,$ff26,$ff32,$ff3f,$ff4b,$ff57,$ff64
  1619.     dc.w    $ff70,$ff7d,$ff89,$ff95,$ffa2,$ffae,$ffbb,$ffc8,$ffd4,$ffe1
  1620.     dc.w    $ffed,$fffa
  1621.  
  1622. mnu_mainstack:    dc.l    0
  1623.  
  1624. ;--------------------------------------------------------------- Slider data --
  1625.  
  1626. mnu_sliderwidth:dc.w    6
  1627. mnu_sliddat:    dc.l    mnu_font+40*16+7*2
  1628. mnu_leftslider:    dc.b    58,0
  1629. mnu_sliderspace: dcb.b    20,0
  1630. mnu_rightslider:dc.b    60,0
  1631. mnu_rawprint:    dc.b    0,0
  1632.         even
  1633. ;----------------------------------------------------------------- Menu data --
  1634.  
  1635. mnu_curx:    dc.w    5
  1636. mnu_cury:    dc.w    78
  1637. mnu_spread:    dc.w    40
  1638. mnu_items:    dc.w    3
  1639.  
  1640. mnu_arrow:    dc.b    ' ',0
  1641. mnu_cleararrow:    dc.b    ' ',0
  1642. mnu_row:    dc.w    30000
  1643. mnu_oldrow:    dc.w    30000
  1644. mnu_screenpos:    dc.w    0
  1645.  
  1646. mnu_printdelay:    dc.l    0
  1647.  
  1648. ;----------------------------------------------------------------- Fire data --
  1649.  
  1650. mnu_rndptr:    dc.l    mnu_morescreen+6*40*256
  1651. mnu_sourceptrs:    dc.l    mnu_morescreen+3*40*256+mnu_speed*40
  1652.         dc.l    mnu_morescreen+4*40*256+mnu_speed*40
  1653.         dc.l    mnu_morescreen+5*40*256+mnu_speed*40
  1654.  
  1655. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Menues %%
  1656.  
  1657. ; Types:    0 = Do nothing
  1658. ;        1 = Sub menu
  1659. ;        2 = Exit sub menu
  1660. ;        3 = Execute subroutine
  1661. ;               4 = Slider
  1662. ;               5 = Cycler
  1663. ;        6 = Branch (SP) set to value in mnu_mainstack
  1664. ;        7 = Change menu
  1665. ;        8 = Get raw key
  1666. ;        9 = Level Load
  1667. ;              10 = Level Save
  1668.  
  1669.  
  1670. mnu_MYMAINMENU:
  1671.         dc.w 0,0
  1672.         dc.l mnu_MYMAINMENUTEXT
  1673.         dc.w 0,40
  1674.         dc.w 20
  1675.         dc.w 7
  1676.         dc.l 0,0
  1677.         dc.l 0,0
  1678.         dc.l 0,0
  1679.         dc.l 0,0
  1680.         dc.l 0,0
  1681.         dc.l 0,0
  1682.         dc.l 0,0
  1683.  
  1684. mnu_MYMAINMENUTEXT:
  1685. ;      12345678901234567890
  1686.  dc.b '                    ',1
  1687.  dc.b '                    ',1
  1688. mnu_CURRENTLEVELLINE:
  1689.  dc.b '                    ',1
  1690.  dc.b '      1 PLAYER      ',1
  1691.  dc.b '     PLAY  GAME     ',1
  1692.  dc.b '  CONTROL  OPTIONS  ',1
  1693.  dc.b '    GAME CREDITS    ',1
  1694.  dc.b '   LOAD  POSITION   ',1
  1695.  dc.b '   SAVE  POSITION   ',1
  1696.  dc.b '                    ',1
  1697.  dc.b '                    ',1
  1698.  dc.b '                    ',0
  1699.  
  1700.  EVEN
  1701.  
  1702. mnu_MYCONTROLSONE:
  1703.     dc.w 0,0
  1704.     dc.l mnu_MYCONTROLTEXTONE
  1705.     dc.w 0,0
  1706.     dc.w 20
  1707.     dc.w 12
  1708.     ds.l 24
  1709.  
  1710.  EVEN
  1711.     
  1712. mnu_MYCONTROLTEXTONE:
  1713. KEY_LINES:
  1714. ;      12345678901234567  8  90
  1715.  dc.b '  TURN LEFT      ',132+$4f,'  ',1
  1716.  dc.b '  TURN RIGHT     ',132+$4e,'  ',1
  1717.  dc.b '  FORWARDS       ',132+$4c,'  ',1
  1718.  dc.b '  BACKWARDS      ',132+$4d,'  ',1
  1719.  dc.b '  FIRE           ',132+$65,'  ',1
  1720.  dc.b '  OPERATE        ',132+$40,'  ',1
  1721.  dc.b '  RUN            ',132+$61,'  ',1
  1722.  dc.b '  FORCE S/S      ',132+$67,'  ',1
  1723.  dc.b '  S/S LEFT       ',132+$39,'  ',1
  1724.  dc.b '  S/S RIGHT      ',132+$3a,'  ',1
  1725.  dc.b '  DUCK           ',132+$22,'  ',1
  1726.  dc.b '        MORE        ',0
  1727.  
  1728.  EVEN
  1729.  
  1730. mnu_MYCONTROLSTWO:
  1731.     dc.w 0,40
  1732.     dc.l mnu_MYCONTROLTEXTTWO
  1733.     dc.w 0,40
  1734.     dc.w 20
  1735.     dc.w 7
  1736.     ds.l 14
  1737.  
  1738.  EVEN
  1739.  
  1740. mnu_MYCONTROLTEXTTWO:
  1741. KEY_LINES2:
  1742. ;      12345678901234567  8  90
  1743.  dc.b '  LOOK BEHIND    ',132+$28,'  ',1
  1744.  dc.b '  JUMP           ',132+$0f,'  ',1
  1745.  dc.b '  LOOK UP        ',132+027,'  ',1
  1746.  dc.b '  LOOK DOWN      ',132+042,'  ',1
  1747.  dc.b '  CENTRE VIEW    ',132+041,'  ',1
  1748.  dc.b '  NEXT WEAPON    ',132+068,'  ',1
  1749.  dc.b '     MAIN  MENU     ',0
  1750.  
  1751.  EVEN
  1752.  
  1753. mnu_MYMASTERMENU:
  1754.  dc.w 0,80
  1755.  dc.l mnu_MYMASTERTEXT
  1756.  dc.w 0,80
  1757.  dc.w 20
  1758.  dc.w 4
  1759.  ds.l 8
  1760.  
  1761.  EVEN
  1762.   
  1763. mnu_MYMASTERTEXT:
  1764. ;      12345678901234567890
  1765.  dc.b '  2 PLAYER  MASTER  ',1
  1766. mnu_CURRENTLEVELLINEM:
  1767.  dc.b '                    ',1
  1768.  dc.b '     PLAY  GAME     ',1
  1769.  dc.b '  CONTROL  OPTIONS  ',0
  1770.  
  1771.  EVEN
  1772.  
  1773. mnu_MYSLAVEMENU:
  1774.  dc.w 0,80
  1775.  dc.l mnu_MYSLAVETEXT
  1776.  dc.w 0,80
  1777.  dc.w 20
  1778.  dc.w 3
  1779.  ds.l 6
  1780.  
  1781.  EVEN
  1782.   
  1783. mnu_MYSLAVETEXT:
  1784. ;      12345678901234567890
  1785.  dc.b '   2 PLAYER SLAVE   ',1
  1786.  dc.b '     PLAY  GAME     ',1
  1787.  dc.b '  CONTROL  OPTIONS  ',0
  1788.  
  1789.  EVEN
  1790.  
  1791. mnu_MYLOADMENU:
  1792.  dc.w 0,40
  1793.  dc.l mnu_MYLOADMENUTEXT
  1794.  dc.w 0,60
  1795.  dc.w 20
  1796.  dc.w 7
  1797.  ds.l 14
  1798.  
  1799.  EVEN
  1800.  
  1801. mnu_MYLOADMENUTEXT:
  1802. ;      12345678901234567890
  1803.  dc.b '   LOAD  POSITION   ',1
  1804. mnu_LSLOTA:
  1805.  dc.b '      NEW GAME      ',1
  1806.  dc.b '                    ',1
  1807.  dc.b '                    ',1
  1808.  dc.b '                    ',1
  1809.  dc.b '                    ',1
  1810.  dc.b '                    ',1
  1811.  dc.b '       CANCEL       ',0 
  1812.  
  1813.  EVEN
  1814.  
  1815. mnu_MYSAVEMENU:
  1816.  dc.w 0,40
  1817.  dc.l mnu_MYSAVEMENUTEXT
  1818.  dc.w 0,60
  1819.  dc.w 20
  1820.  dc.w 6
  1821.  ds.l 14
  1822.  
  1823.  EVEN
  1824.  
  1825. mnu_MYSAVEMENUTEXT:
  1826. ;      12345678901234567890
  1827.  dc.b '   SAVE  POSITION   ',1
  1828. mnu_SSLOTA:
  1829.  dc.b '                    ',1
  1830.  dc.b '                    ',1
  1831.  dc.b '                    ',1
  1832.  dc.b '                    ',1
  1833.  dc.b '                    ',1
  1834.  dc.b '       CANCEL       ',0 
  1835.  
  1836.  EVEN
  1837.  
  1838.  
  1839. mnu_askfordisk:
  1840.         dc.w 0,70
  1841.         dc.l mnu_askfordisktext
  1842.         dc.w 0,110    ; top of where cursor starts (1st option)
  1843.         dc.w 20
  1844.         dc.w 1
  1845.         dc.l 2,0
  1846.  
  1847. mnu_mainmenu:    dc.w    6,12            ; X (bytes),Y (rows) of top left of scrn 
  1848.         dc.l    mnu_maintext        ; Text ptr
  1849.         dc.w    4,70            ; XCursor,YCursor
  1850.         dc.w    20            ; Spread
  1851.         dc.w    7            ; Items
  1852.         dc.l    5,mnu_playercycler    ; Change player type
  1853.         dc.l    3,mnu_playgame
  1854.         dc.l    1,mnu_controlmenu0
  1855.         dc.l    3,mnu_viewcredz
  1856.         dc.l    1,mnu_loadmenu
  1857.         dc.l    1,mnu_savemenu
  1858.         dc.l    2,0            ; 2=Exit sub menu (Esc)
  1859.  
  1860. mnu_controlmenu0:dc.w    6,32            ; X,Y
  1861.         dc.l    mnu_controltext0    ; Text ptr
  1862.         dc.w    4,50            ; XCursor,YCursor
  1863.         dc.w    20            ; Spread
  1864.         dc.w    9            ; Items
  1865.         dc.l    8,mnu_key00
  1866.         dc.l    8,mnu_key01
  1867.         dc.l    8,mnu_key02
  1868.         dc.l    8,mnu_key03
  1869.         dc.l    8,mnu_key04
  1870.         dc.l    8,mnu_key05
  1871.         dc.l    8,mnu_key06
  1872.         dc.l    8,mnu_key07
  1873.         dc.l    7,mnu_controlmenu1
  1874.  
  1875. mnu_controlmenu1:dc.w    6,32            ; X,Y
  1876.         dc.l    mnu_controltext1    ; Text ptr
  1877.         dc.w    4,50            ; XCursor,YCursor
  1878.         dc.w    20            ; Spread
  1879.         dc.w    9            ; Items
  1880.         dc.l    8,mnu_key08
  1881.         dc.l    8,mnu_key09
  1882.         dc.l    8,mnu_key10
  1883.         dc.l    8,mnu_key11
  1884.         dc.l    8,mnu_key12
  1885.         dc.l    8,mnu_key13
  1886.         dc.l    8,mnu_key14
  1887.         dc.l    8,mnu_key15
  1888.         dc.l    7,mnu_controlmenu2
  1889.  
  1890. mnu_controlmenu2:dc.w    4,12            ; X,Y
  1891.         dc.l    mnu_controltext2    ; Text ptr
  1892.         dc.w    4,210            ; XCursor,YCursor
  1893.         dc.w    20            ; Spread
  1894.         dc.w    1            ; Items
  1895.         dc.l    7,mnu_controlmenu0
  1896.  
  1897. mnu_loadmenu:    dc.w    4,42
  1898.         dc.l    mnu_loadmenutext
  1899.         dc.w    4,80            ; XCursor,YCursor
  1900.         dc.w    20            ; Spread
  1901.         dc.w    7            ; Items
  1902.         dc.l    9,mnu_saved0
  1903.         dc.l    9,mnu_saved1
  1904.         dc.l    9,mnu_saved2
  1905.         dc.l    9,mnu_saved3
  1906.         dc.l    9,mnu_saved4
  1907.         dc.l    9,mnu_saved5
  1908.         dc.l    2,0
  1909.  
  1910. mnu_savemenu:    dc.w    4,42
  1911.         dc.l    mnu_savemenutext
  1912.         dc.w    4,80            ; XCursor,YCursor
  1913.         dc.w    20            ; Spread
  1914.         dc.w    7            ; Items
  1915.         dc.l    10,mnu_saved0
  1916.         dc.l    10,mnu_saved1
  1917.         dc.l    10,mnu_saved2
  1918.         dc.l    10,mnu_saved3
  1919.         dc.l    10,mnu_saved4
  1920.         dc.l    10,mnu_saved5
  1921.         dc.l    2,0
  1922.  
  1923. mnu_quitmenu:    dc.w    4,82
  1924.         dc.l    mnu_quitmenutext
  1925.         dc.w    4,120            ; XCursor,YCursor
  1926.         dc.w    20            ; Spread
  1927.         dc.w    2            ; Items
  1928.         dc.l    6,mnu_loop
  1929.         dc.l    6,mnu_exit
  1930.  
  1931. mnu_2pmastermenu:
  1932.         dc.w    4,82
  1933.         dc.l    mnu_2pmastertext
  1934.         dc.w    4,120            ; XCursor,YCursor
  1935.         dc.w    20            ; Spread
  1936.         dc.w    3            ; Items
  1937.         dc.l    5,mnu_levelcycler
  1938.         dc.l    2,0
  1939.         dc.l    2,0
  1940.  
  1941. ;--------------------------------------------------------------------- Texts --
  1942. mnu_askfordisktext:
  1943.         ;     12345678901234567890
  1944.         dc.b 'Please Insert Volume',1
  1945.         dc.b 1
  1946. mnu_diskline:
  1947.         dc.b '                    ',0
  1948.  
  1949. mnu_slavewaittext:
  1950.         dc.b    'Waiting for ',1
  1951.         dc.b    'your opponent',1
  1952.         dc.b    'to respond...',1,1
  1953.         dc.b    58,58,'Cancel',0
  1954.  
  1955. mnu_masterwaittext:
  1956.         dc.b    'Waiting for ',1
  1957.         dc.b    'your opponent',1
  1958.         dc.b    'to respond...',1,1
  1959.         dc.b    58,58,'Cancel',0
  1960.  
  1961. mnu_maintext:    dc.b    1,1
  1962.         dc.b    60,'Level '
  1963. mnu_mainleveltext:dc.b    'A',58,1        
  1964.         dc.b    1
  1965.         dc.b    'Play game',1
  1966.         dc.b    'Control options',1
  1967.         dc.b    'Game credits',1
  1968.         dc.b    'Load position',1
  1969.         dc.b    'Save position',1
  1970.         dc.b    'Quit',1
  1971.         dc.b    0
  1972.  
  1973. mnu_quitmenutext:dc.b    ' Quit game',131,131,131,1,1
  1974.         dc.b    ' No,I',39,'m addicted',1
  1975.         dc.b    ' Yes! Let me OUT',1
  1976.         dc.b    0
  1977.  
  1978. mnu_2pmastertext:dc.b    ' 2 Player master',1,1
  1979.         dc.b    ' Play level',1
  1980.         dc.b    ' Start game',1
  1981.         dc.b    ' ',58,58,'Cancel',1
  1982.         dc.b    0
  1983.  
  1984. mnu_loadmenutext:dc.b    ' Load game',1,1
  1985.         dc.b    1,1,1,1,1,1
  1986.         dc.b    ' ',58,58,'Cancel',58,58,0
  1987.  
  1988. mnu_savemenutext:dc.b    ' Save game',1,1
  1989.         dc.b    1,1,1,1,1,1
  1990.         dc.b    ' ',58,58,'Cancel',58,58,0
  1991.         
  1992. mnu_controltext0:dc.b    1
  1993.         dc.b    ' Turn left',1
  1994.         dc.b    ' Turn right',1
  1995.         dc.b    ' Forwards',1
  1996.         dc.b    ' Backwards',1
  1997.         dc.b    ' Fire',1
  1998.         dc.b    ' Operate door',1
  1999.         dc.b    ' Run',1
  2000.         dc.b    ' Sidestep',1
  2001.         dc.b    60,60,'More',60,60,1
  2002.         dc.b    0
  2003.  
  2004. mnu_controltext1:dc.b    1
  2005.         dc.b    ' Sidestep left',1
  2006.         dc.b    ' Sidestep right',1
  2007.         dc.b    ' Duck',1
  2008.         dc.b    ' Look behind',1
  2009.         dc.b    ' Jump',1
  2010.         dc.b    ' Look up',1
  2011.         dc.b    ' Look down',1
  2012.         dc.b    ' Centre view',1
  2013.         dc.b    60,60,'Others',60,60,1
  2014.         dc.b    0
  2015.  
  2016. mnu_controltext2:dc.b    1
  2017.         dc.b    157,'Pause',1
  2018.         dc.b    212,'Zoom in on map',1
  2019.         dc.b    213,'Zoom out on map',1
  2020.         dc.b    214,'4/8 Ch. sound',1
  2021.         dc.b    215,'Mono/Stereo snd',1
  2022.         dc.b    216,'Recall message',1
  2023.         dc.b    217,'Render quality',1
  2024.         dc.b    133,'-',142,'Select weapon',1
  2025.         dc.b    161,'-',195,'Scroll map',1
  2026.         dc.b    ' ',58,58,'Back',58,58,1
  2027.         dc.b    0
  2028.  
  2029. mnu_leveltext:    dc.b    'Level '
  2030. mnu_levelno:    dc.b    'A',0
  2031.  
  2032. mnu_protecttext:dc.b    'ENTER NUMBER AT',1,1
  2033.         dc.b    '  TABLE     '
  2034. mnu_tableptr:    dc.b    '0',1
  2035.         dc.b    '  ROW      '
  2036. mnu_rowptr:    dc.b    '00',1
  2037.         dc.b    '  COLUMN    '
  2038. mnu_columnptr:    dc.b    '0',1,1
  2039.         dc.b    '  NUMBER  '
  2040. mnu_numberptr:    dc.b    '      '
  2041.         dc.b    0
  2042.  
  2043. mnu_wrongtext:    dc.b    'Wrong!',0
  2044.  
  2045. mnu_dontbelong:    dc.b    'Nice try.',0
  2046.         even
  2047.  
  2048. ;------------------------------------------------------- Cyclers and sliders --
  2049.  
  2050. mnu_level0:    dc.b    'A',0
  2051. mnu_level1:    dc.b    'B',0
  2052. mnu_level2:    dc.b    'C',0
  2053. mnu_level3:    dc.b    'D',0
  2054. mnu_level4:    dc.b    'E',0
  2055. mnu_level5:    dc.b    'F',0
  2056. mnu_level6:    dc.b    'G',0
  2057. mnu_level7:    dc.b    'H',0
  2058. mnu_level8:    dc.b    'I',0
  2059. mnu_level9:    dc.b    'J',0
  2060. mnu_level10:    dc.b    'K',0
  2061. mnu_level11:    dc.b    'L',0
  2062. mnu_level12:    dc.b    'M',0
  2063. mnu_level13:    dc.b    'N',0
  2064. mnu_level14:    dc.b    'O',0
  2065. mnu_level15:    dc.b    'P',0
  2066.         even
  2067.  
  2068. mnu_levelcycler:dc.w    24,2            ; X,Y Add
  2069.         dc.w    16            ; #of items
  2070.         dc.l    mnu_2plevel        ; Value to effect
  2071.         dc.l    mnu_level0
  2072.         dc.l    mnu_level1
  2073.         dc.l    mnu_level2
  2074.         dc.l    mnu_level3
  2075.         dc.l    mnu_level4
  2076.         dc.l    mnu_level5
  2077.         dc.l    mnu_level6
  2078.         dc.l    mnu_level7
  2079.         dc.l    mnu_level8
  2080.         dc.l    mnu_level9
  2081.         dc.l    mnu_level10
  2082.         dc.l    mnu_level11
  2083.         dc.l    mnu_level12
  2084.         dc.l    mnu_level13
  2085.         dc.l    mnu_level14
  2086.         dc.l    mnu_level15
  2087.         even
  2088.  
  2089. mnu_playercycler:dc.w    2,2            ; X,Y Add
  2090.         dc.w    3            ; #of items
  2091.         dc.l    mnu_playtype        ; Value to effect
  2092.         dc.l    mnu_playtype0
  2093.         dc.l    mnu_playtype1
  2094.         dc.l    mnu_playtype2
  2095.         even
  2096.  
  2097. mnu_playtype0:    dc.b    '1 Player       ',0
  2098. mnu_playtype1:    dc.b    '2 Player master',0
  2099. mnu_playtype2:    dc.b    '2 Player slave ',0
  2100.  
  2101. ;----------------------------------------------------------------- Animation --
  2102.         
  2103. mnu_frameptr:    dc.l    mnu_cursanim
  2104.  
  2105. mnu_errcursorlong:
  2106.         dc.b    240,240,241,241,242,242,243,243
  2107.         dc.b    240,240,241,241,242,242,243,243
  2108.         dc.b    240,240,241,241,242,242,243,243
  2109.         dc.b    240,240,241,241,242,242,243,243
  2110.         dc.b    240,240,241,241,242,242,243,243
  2111.         dc.b    240,240,241,241,242,242,243,243
  2112.         dc.b    240,240,241,241,242,242,243,243
  2113.         dc.b    240,240,241,241,242,242,243,243
  2114.         dc.b    240,240,241,241,242,242,243,243
  2115. mnu_errcursanim:dc.b    240,240,241,241,242,242,243,243
  2116.         dc.b    240,240,241,241,242,242,243,243
  2117.         dc.b    240,240,241,241,242,242,243,243
  2118.         dc.b    240,240,241,241,242,242,243,243
  2119. mnu_cursanim:    dc.b    130,129,128,127,126,125,124,123,8
  2120.         even
  2121.  
  2122. mnu_errbutanim:    dc.b    240,240,241,241,242,242,243,243
  2123.         dc.b    240,240,241,241,242,242,243,243
  2124.         dc.b    240,240,241,241,242,242,243,243
  2125.         dc.b    240,240,241,241,242,242,243,243
  2126. mnu_buttonanim:    dc.b    236,236,236,236
  2127.         dc.b    237,237,237,237
  2128.         dc.b    238,238,238,238
  2129.         dc.b    239,239,239,239
  2130.         dc.b    238,238,238,238
  2131.         dc.b    237,237,237,237
  2132.         dc.b    24
  2133.         even
  2134. mnu_font:    incbin    "demo:Menu/font16x16.raw2"
  2135. mnu_fontpal:    incbin    "demo:Menu/FONT16x16.PAL2"
  2136. mnu_firepal:    incbin    "Demo:Menu/FirePal.Pal2"
  2137. mnu_backpal:    incbin    "demo:Menu/Back.Pal"
  2138.  
  2139. mnu_palette:    ds.l    256
  2140.  
  2141. mnu_frame:    incbin    "demo:Menu/Credits_Only.Raw"
  2142.  
  2143.         section    data_c,data_c
  2144.  
  2145. mnu_copper:
  2146.         dc.w    intreq,$8010
  2147.         dc.l    $01000211,$01020000,$01040000
  2148.         dc.l    $0108fff8,$010afff8,$010c0000
  2149.         dc.l    $01fc0003
  2150.         dc.l    $008e2881,$009028c1,$00920038,$009400d0
  2151. mnu_bplptrs:    dc.l    $00e00000,$00e20000,$00e40000,$00e60000
  2152.         dc.l    $00e80000,$00ea0000,$00ec0000,$00ee0000
  2153.         dc.l    $00f00000,$00f20000,$00f40000,$00f60000
  2154.         dc.l    $00f80000,$00fa0000,$00fc0000,$00fe0000
  2155. mnu_colptrs:    ds.l    (32+1)*8*2+1
  2156.         cnop    64,64
  2157.  
  2158. mnu_screen:    incbin    "Demo:Menu/Back2.Raw"
  2159.         ds.b    40*256*2
  2160.  
  2161. mnu_morescreen:    ds.b    40*256*8
  2162.  
  2163. counter: dc.l 0
  2164. main_vblint: dc.l 0
  2165. main_counter: dc.l 0
  2166. main_bltint: dc.l 0
  2167. main_vbrbase: dc.l 0
  2168. timer: dc.l 0